import {
	openLoading,
	closeLoading,
	matchEnv,
} from './index'

import {
	HTTP_CODE_MESSAGE
} from './dictionary.js'

import store from '@/store/index.js';

// #ifdef APP-VUE
import {
	uniEmitIosEvents
} from '@/utils/uniEmitIosEvents.js' // 发送ios事件
// #endif
/**
 * 请求封装
 * @param {Boolean} defaultHandle 是否对返回数据进行处理
 * @param {Boolean} showLoading 是否显示加载loading
 * @param {Boolean} showError 是否显示请求错误
 */
const request = ({
	defaultHandle = true,
	showLoading = true,
	showError = true,
	...options
}) => {
	showLoading && openLoading()
	// #ifdef MP-WEIXIN
	// 非线上版本微信小程序环境变量切换
	const {
		miniProgram: {
			envVersion
		}
	} = uni.getAccountInfoSync()
	const ENV_TYPE = uni.getStorageSync('ENV_TYPE')
	if (envVersion !== 'release' && ENV_TYPE) {
		const {
			url
		} = options
		options.url = matchEnv(url, ENV_TYPE)
	}
	// #endif
	return new Promise((resolve, reject) => {
		const token = uni.getStorageSync('token') || ''
		uni.request({
			url: options.url,
			method: options.method || 'POST',
			header: {
				token
			},
			data: options.data,
			success(res) {
				showLoading && closeLoading();
				if (res.statusCode === 200) {
					if (defaultHandle) {
						// 处理数据
						if (res.data.code === 100000) {
							// 后台返回1000,请求成功,返回数据
							if (res.data.data) {
								resolve(res.data.data)
							} else {
								resolve(res.data)
							}
						} else if (res.data.code === 100012 || res.data.code === 100013) {
							// token过期
							store.dispatch('user/getWxCode_store').then(code => {
								store.dispatch('user/userLogin_store', code).then(token => {
									store.commit('setState', {
										againLogin: true
									});
								})
							})
							// resolve(res.data)
						} else {
							// 请求成功, 后台报错, 提示错误
							showError && uni.showToast({
								title: res.data.message || res.data.msg,
								icon: 'none',
								duration: 1500
							});
							// reject(res.data)
						}
					} else {
						resolve(res)
					}
				} else if (res.statusCode === 401) {
					uni.showToast({
						title: '请先登录',
						icon: 'warn',
						duration: 1500
					});
					// #ifdef MP-WEIXIN
					uni.redirectTo({
						url: '/mine/login/login'
					})
					// #endif

					// #ifdef APP-VUE
					// 跳转ios登录
					uniEmitIosEvents("GMJKToLoginVC")
					// #endif
				} else {
					showError && uni.showToast({
						title: HTTP_CODE_MESSAGE[res.statusCode] || '出错了',
						icon: 'error',
						duration: 1500
					});
					reject(res)
				}
			},
			fail(err) {
				showLoading && closeLoading();
				showError && uni.showToast({
					title: '出错了',
					icon: 'error',
					duration: 1500
				});
			}
		})
	})
}

export default request